package com.casa_apoio.estoque.mode.dao;

import com.casa_apoio.model.dao.HibernateDAO;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

public class EntradaDAO<T> extends HibernateDAO<T> {

    public EntradaDAO(Class<T> classe, Session session) {
        super(classe, session);
    }

    public List<T> entradasNaoFinalizada() {
        Criterion filtro = Restrictions.eq("finalizado", false);
        Criteria criteria = criaCriteria();
        List<T> entradas = criteria.add(filtro).addOrder(Order.desc("dataMovimentacao")).list();
        return entradas;
    }

    public List<T> relarotioTodosPeriodo(Date dataInicio, Date datafinal) {
        Criterion filtro = Restrictions.between("dataMovimentacao", dataInicio, datafinal);
        Criteria criteria = criaCriteria().add(Restrictions.eq("finalizado", true));
        List<T> entradas = criteria.add(filtro).addOrder(Order.asc("fornecedor")).addOrder(Order.asc("dataMovimentacao")).list();
        return entradas;
    }

    public List<T> relarotioFornecedorPeriodo(Date dataInicio, Date datafinal, Integer fornecedor) {
        Criterion filtro = Restrictions.between("dataMovimentacao", dataInicio, datafinal);
        Criteria criteria = criaCriteria().add(Restrictions.eq("fornecedor.idFornecedor", fornecedor)).add(Restrictions.eq("finalizado", true));
        List<T> entradas = criteria.add(filtro).addOrder(Order.asc("dataMovimentacao")).list();
        return entradas;
    }    
}
